library(readr)
library(ggplot2)
library(dplyr)
library(methods)
library(stringi)
library(keras)
resnet50 <- application_resnet50(weights = 'imagenet', include_top = TRUE)
model_embed <- keras_model(inputs = resnet50$input,
                           outputs = get_layer(resnet50, 'avg_pool')$output)

reading in the files

flowers <- read_csv("my-image-data.csv")
## Parsed with column specification:
## cols(
##   obs_id = col_character(),
##   train_id = col_character(),
##   class = col_integer(),
##   class_name = col_integer(),
##   path_to_image = col_character()
## )
xx4 <- read_rds("flowers_embed.rds")

creating X and Y matrices

X <- t(apply(xx4, 1, cbind))
y <- flowers$class

We print one sample image1 each of 20 different classes

image_path <- "oxford-102-flowers/jpg/image_00288.jpg"
image <- image_load(image_path, target_size = c(224,224))
image <- image_to_array(image)
image <- array_reshape(image, c(1, dim(image)))
dim(image)
## [1]   1 224 224   3
par(mar = rep(0, 4L))
plot(0,0,xlim=c(0,1),ylim=c(0,1),axes= FALSE, type = "n", asp=1)
rasterImage(image[1,,,] / 255,0,0,1,1)

image_path <- "oxford-102-flowers/jpg/image_00920.jpg"
image <- image_load(image_path, target_size = c(224,224))
image <- image_to_array(image)
image <- array_reshape(image, c(1, dim(image)))
dim(image)
## [1]   1 224 224   3
par(mar = rep(0, 4L))
plot(0,0,xlim=c(0,1),ylim=c(0,1),axes= FALSE, type = "n", asp=1)
rasterImage(image[1,,,] / 255,0,0,1,1)

now this model taking the images and making a prediction model out of it

X_train <- X[flowers$train_id == "train",]          
y_train <- to_categorical(flowers$class[flowers$train_id == "train"])

model <- keras_model_sequential()
model %>%
  layer_dense(units = 256, input_shape = ncol(X_train)) %>%
  layer_activation(activation = "relu") %>%
  layer_dropout(rate = 0.5) %>%

  layer_dense(units = 256) %>%
  layer_activation(activation = "relu") %>%
  layer_dropout(rate = 0.5) %>%

  layer_dense(units = ncol(y_train)) %>%
  layer_activation(activation = "softmax")

model %>% compile(loss = 'categorical_crossentropy',
                  optimizer = optimizer_rmsprop(lr = 0.001 / 2),
                  metrics = c('accuracy'))


history <- model %>% fit(X_train, y_train, epochs = 20)

plot(history)

y_pred <- predict_classes(model, X)
tapply(y == y_pred, flowers$train_id, mean)
##     train     valid 
## 0.9953224 0.9205379

which.max takes the best prediction from each class and draws them

set.seed(1)
par(mfrow = c(2, 3))

y_pred_mat <- predict(model, X)
id <- apply(y_pred_mat, 2, which.max)

for (i in id) try({
  par(mar = rep(0, 4L))
  plot(0,0,xlim=c(0,1),ylim=c(0,1),axes= FALSE,type = "n")
  Z <- image_to_array(image_load(flowers$path_to_image[i], target_size = c(224,224)))
  rasterImage(Z /255,0,0,1,1)
  text(0.5, 0.1, label = flowers$class_name[y_pred[i] + 1L], col = "blue", cex=2)
})

then dont match, that are wrong, and we know they are because predicted is not equal to actual

set.seed(1)
par(mfrow = c(2, 3))
id <- sample(which(y_pred != y), 20)

for (i in id) {
  par(mar = rep(0, 4L))
  plot(0,0,xlim=c(0,1),ylim=c(0,1),axes= FALSE,type = "n")
  Z <- image_to_array(image_load(flowers$path_to_image[i], target_size = c(224,224)))
  rasterImage(Z /255,0,0,1,1)
  text(0.5, 0.1, label = flowers$class_name[y_pred[i] + 1L], col = "blue", cex=2)
}

PCA analysis

pca <- as_tibble(prcomp(X)$x[,1:2])
pca$y <- flowers$class_name[y + 1L]

just plot the PCA (this is part of the requirements , visualisation)

ggplot(pca, aes(PC1, PC2)) +
  geom_point(aes(color = y), alpha = 0.2, size = 7) +
  labs(x = "", y = "", color = "class") +
  theme_minimal()

confusion matrix

table(value = flowers$class_name[y + 1L], prediction = flowers$class_name[y_pred + 1L], flowers$train_id)
## , ,  = train
## 
##      prediction
## value   1   3   4   5   6   7  10  12  14  15  17  20  22  23  26  28  31
##   1    51   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   3     0  51   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   4     0   0  72   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   5     0   0   0  29   0   0   0   0   0   0   0   0   0   0   0   0   0
##   6     0   0   0   0  57   0   0   0   0   0   0   0   0   0   0   0   0
##   7     0   0   0   0   0  24   0   0   0   0   0   0   0   0   0   0   0
##   10    0   0   0   0   0   0  37   0   0   0   0   0   0   0   0   0   0
##   12    0   0   0   0   0   0   0  30   0   0   0   0   0   0   0   0   0
##   14    0   0   0   0   0   0   0   0  45   0   0   0   0   0   0   0   0
##   15    0   0   0   0   0   0   0   0   0  24   0   0   0   0   0   0   0
##   17    0   0   0   0   0   0   0   0   0   0 100   0   0   0   0   0   0
##   20    0   0   0   0   0   0   0   0   0   0   0  94   0   0   0   0   0
##   22    0   0   0   0   0   0   0   0   0   0   0   0 125   0   0   0   0
##   23    0   0   0   0   0   0   0   0   0   0   0   0   0  27   0   0   0
##   26    0   0   0   0   1   0   0   0   0   0   0   0   0   0  47   0   0
##   28    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  65   0
##   31    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  65
##   33    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   34    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   35    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   36    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   37    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   39    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   40    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   42    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   43    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   45    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   46    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   47    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   49    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   50    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   51    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   53    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   57    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   59    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   61    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   64    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   65    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   67    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   68    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   69    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   71    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   72    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   73    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   74    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   75    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   76    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   79    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   80    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   81    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   83    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   84    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   85    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   86    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   87    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   89    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   90    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   94    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   96    0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0
##   97    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   100   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##      prediction
## value  33  34  35  36  37  39  40  42  43  45  46  47  49  50  51  53  57
##   1     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   3     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   4     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   5     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   6     0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0
##   7     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   10    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   12    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   14    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   15    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   17    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   20    0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0
##   22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   23    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   26    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   28    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   31    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   33   40   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   34    0  63   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   35    0   0  35   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   36    0   0   0  69   0   0   0   0   0   0   0   0   0   0   0   0   0
##   37    0   0   0   0  79   0   0   0   0   0   0   0   0   0   0   0   0
##   39    0   0   0   0   0  26   0   0   0   0   0   0   0   0   0   0   0
##   40    0   0   0   0   0   0  40   0   0   0   0   0   0   0   0   0   0
##   42    0   0   0   0   0   0   0  61   0   0   0   0   0   0   0   0   0
##   43    0   0   0   0   0   0   0   0  27   0   0   0   0   0   0   0   0
##   45    0   0   0   0   0   0   0   0   0  56   0   0   0   0   0   1   0
##   46    0   0   0   0   0   0   0   0   0   0  23   0   0   0   0   0   0
##   47    0   0   0   0   0   0   0   0   0   0   0  40   0   0   0   0   0
##   49    0   0   0   0   0   0   0   0   0   0   0   0  95   0   0   0   0
##   50    0   0   0   0   0   0   0   0   0   0   0   0   0  47   0   0   0
##   51    0   0   0   0   0   0   0   0   0   0   0   0   0   0  49   0   0
##   53    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  35   0
##   57    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0 135
##   59    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   61    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   64    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   65    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   67    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   68    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   69    0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0
##   71    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   72    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   73    0   0   0   0   0   0   4   0   0   0   0   0   0   0   0   0   0
##   74    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   75    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   76    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   79    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   80    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   81    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   83    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   84    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   85    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   86    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   87    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   89    0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   1
##   90    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   94    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   96    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   97    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   100   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##      prediction
## value  59  61  64  65  67  68  69  71  72  73  74  75  76  79  80  81  83
##   1     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   3     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   4     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   5     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   6     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   7     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   10    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   12    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   14    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   15    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   17    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   20    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   22    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   23    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   26    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   28    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   31    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   33    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   34    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   35    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   36    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   37    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   39    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   40    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   42    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   43    1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   45    0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0
##   46    1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   47    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   49    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   50    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   51    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   53    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   57    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   59  207   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   61    0  79   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   64    0   0  73   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   65    0   0   0 118   0   0   0   0   0   0   0   0   0   0   0   0   0
##   67    0   0   0   0  24   0   0   0   0   0   0   0   0   0   0   0   0
##   68    0   0   0   0   0  40   0   0   0   0   0   0   0   0   0   0   0
##   69    0   0   0   0   0   0 108   0   0   0   0   0   0   0   0   0   0
##   71    0   0   0   0   0   0   0  24   0   0   0   0   0   0   0   0   0
##   72    0   0   0   0   0   0   0   0 275   0   0   0   0   0   0   0   0
##   73    0   0   0   0   0   0   0   0   0 175   0   0   0   0   0   0   0
##   74    0   0   0   0   0   0   0   0   0   0  28   0   0   0   0   0   0
##   75    0   0   0   0   0   0   0   0   0   0   0  84   0   0   0   0   0
##   76    0   0   0   0   0   0   0   0   0   0   0   0 180   0   0   0   0
##   79    0   0   0   0   0   0   0   0   0   0   0   0   0  69   0   0   0
##   80    0   0   0   0   0   0   0   0   0   0   0   0   0   0  29   0   0
##   81    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  94   0
##   83    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  25
##   84    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   85    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   86    1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0
##   87    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   89    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   90    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   94    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   96    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   97    0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0
##   100   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##      prediction
## value  84  85  86  87  89  90  94  96  97 100
##   1     0   0   0   0   0   0   0   0   0   0
##   3     0   0   0   0   0   0   0   0   0   0
##   4     0   0   0   0   0   0   0   0   0   0
##   5     0   0   0   0   0   0   0   0   0   0
##   6     0   0   0   0   0   0   0   0   0   0
##   7     0   0   0   0   0   0   0   0   0   0
##   10    0   0   0   0   0   0   0   0   0   0
##   12    0   0   0   0   0   0   0   0   0   0
##   14    0   0   0   0   0   0   0   0   0   0
##   15    0   0   0   0   0   0   0   0   0   0
##   17    0   0   0   0   0   0   0   0   0   0
##   20    0   0   1   0   0   0   0   0   0   0
##   22    0   0   0   0   0   0   0   0   0   0
##   23    0   0   0   0   0   0   0   0   0   0
##   26    0   0   1   0   0   0   0   0   0   0
##   28    0   0   0   0   0   0   0   0   0   0
##   31    0   0   0   0   0   0   0   0   0   0
##   33    0   0   0   0   0   0   0   0   0   0
##   34    0   0   0   0   0   0   0   0   0   0
##   35    0   0   0   0   0   0   0   0   0   0
##   36    0   0   0   0   0   0   0   0   0   0
##   37    0   0   0   0   0   0   0   0   0   0
##   39    0   0   0   0   0   0   0   0   1   0
##   40    0   0   0   0   0   0   0   0   0   0
##   42    0   0   0   0   1   0   0   0   0   0
##   43    0   0   0   0   0   0   0   0   0   0
##   45    0   0   0   0   0   0   0   0   0   0
##   46    0   0   0   0   0   0   0   0   0   0
##   47    0   0   0   0   0   0   0   0   0   0
##   49    0   0   0   0   0   0   0   0   0   0
##   50    0   0   0   0   0   0   0   0   0   0
##   51    0   0   0   0   0   0   0   0   0   0
##   53    0   0   0   0   0   0   0   0   0   0
##   57    0   0   0   0   0   0   0   0   0   0
##   59    0   0   0   0   0   0   0   0   0   0
##   61    0   0   0   0   0   0   0   0   0   0
##   64    0   0   0   0   0   0   0   0   0   0
##   65    0   0   0   0   0   0   0   0   0   0
##   67    0   0   0   0   0   0   0   0   0   0
##   68    0   0   0   0   0   0   0   0   0   0
##   69    0   0   0   0   0   0   0   0   0   0
##   71    0   0   0   0   1   0   0   0   0   0
##   72    0   0   0   0   0   0   0   0   0   0
##   73    0   0   0   0   0   0   0   0   0   0
##   74    0   0   0   0   0   0   0   0   0   0
##   75    0   0   0   0   0   0   0   0   0   0
##   76    0   0   0   0   0   0   0   0   0   0
##   79    0   0   0   0   0   0   0   0   0   0
##   80    0   0   0   0   0   0   0   0   0   0
##   81    0   0   0   0   0   0   0   0   0   0
##   83    0   0   0   0   0   0   0   0   0   0
##   84   68   0   0   0   0   0   0   0   0   0
##   85    0  61   0   0   0   0   0   0   0   0
##   86    0   0 187   0   0   0   0   0   0   0
##   87    0   0   0 161   0   0   0   0   0   0
##   89    0   0   0   0 204   0   0   0   0   0
##   90    0   0   0   0   0 296   0   0   0   0
##   94    0   0   0   0   0   0 175   0   0   0
##   96    0   0   0   0   0   0   0  91   0   0
##   97    0   0   0   0   0   0   0   0 131   0
##   100   0   0   0   0   0   0   0   0   0  25
## 
## , ,  = valid
## 
##      prediction
## value   1   3   4   5   6   7  10  12  14  15  17  20  22  23  26  28  31
##   1    34   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   3     0  34   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   4     0   0  47   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   5     0   0   0  20   0   0   0   0   0   0   0   0   0   0   0   0   0
##   6     0   0   0   0  34   0   0   0   0   0   0   0   0   0   0   0   0
##   7     0   0   0   0   0  13   0   0   0   0   0   0   1   0   0   1   0
##   10    0   0   0   0   0   0  24   0   0   0   0   0   0   0   0   0   0
##   12    0   0   0   0   0   0   0  20   0   0   0   0   0   0   0   0   0
##   14    0   0   0   0   2   0   0   0  24   0   0   0   0   0   0   0   0
##   15    0   0   0   0   0   0   0   0   0  14   0   0   0   0   0   0   0
##   17    0   0   0   0   0   0   0   0   0   0  66   0   0   0   0   0   0
##   20    0   0   3   0   0   0   0   0   0   0   1  46   0   0   1   0   0
##   22    0   0   0   0   0   0   0   0   0   0   0   0  79   0   0   0   0
##   23    0   0   0   0   0   0   0   0   0   0   0   0   0  18   0   0   0
##   26    0   0   0   0   2   0   0   0   0   0   0   0   0   0  29   0   0
##   28    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  42   0
##   31    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  44
##   33    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   34    0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   35    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   36    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   37    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   39    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   40    0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0
##   42    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   43    0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0
##   45    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   46    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   47    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   49    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   50    0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0
##   51    1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   53    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   57    0   0   0   0   1   0   0   0   1   0   0   0   0   0   1   0   0
##   59    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   61    0   0   0   0   3   0   0   0   0   0   0   0   0   0   0   0   0
##   64    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   65    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   67    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   68    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   69    0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0
##   71    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   72    0   0   0   0   5   0   0   0   0   0   0   0   0   0   0   0   0
##   73    0   0   1   0   1   0   0   0   0   2   0   0   0   0   0   0   0
##   74    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   75    0   0   0   0   0   0   1   0   0   0   0   0   2   0   0   0   0
##   76    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   79    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   80    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   81    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   83    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   84    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   85    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   86    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   87    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   89    0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0
##   90    0   0   0   0   0   0   0   0   0   0   0   1   1   0   0   0   0
##   94    1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   96    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   97    0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0
##   100   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##      prediction
## value  33  34  35  36  37  39  40  42  43  45  46  47  49  50  51  53  57
##   1     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   3     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   4     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   5     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   6     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   7     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   10    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   12    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   14    0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0
##   15    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1
##   17    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   20    0   0   0   0   0   1   0   1   0   0   1   0   2   0   1   0   0
##   22    0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0
##   23    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   26    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   28    0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0
##   31    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   33   23   0   0   0   0   0   0   0   0   2   0   0   0   0   0   0   0
##   34    0  39   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   35    0   0  20   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   36    0   0   0  43   0   0   0   0   0   0   0   0   0   0   0   0   0
##   37    0   0   0   0  52   0   0   0   0   0   0   0   0   0   0   0   0
##   39    0   0   0   0   0  15   0   0   0   0   0   0   0   0   0   0   0
##   40    0   0   0   0   0   0  20   0   0   0   0   0   0   0   0   0   0
##   42    0   0   0   0   0   0   0  39   0   0   0   0   0   0   0   0   0
##   43    0   0   0   0   0   0   0   0  17   0   0   0   0   0   0   0   0
##   45    0   0   0   0   0   0   0   0   0  34   0   0   0   0   0   2   0
##   46    0   0   0   0   0   1   0   0   0   0  11   0   0   0   0   0   0
##   47    0   0   0   0   0   0   0   0   0   0   0  27   0   0   0   0   0
##   49    0   0   0   0   0   0   0   0   0   0   0   0  55   0   0   0   0
##   50    0   0   0   0   0   0   0   0   0   0   0   0   0  29   0   0   0
##   51    0   0   1   0   0   0   0   0   0   0   0   0   0   0  25   0   0
##   53    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  22   0
##   57    0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0  72
##   59    0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0
##   61    0   0   1   0   0   0   0   0   0   0   0   0   0   0   2   0   0
##   64    0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0
##   65    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   67    0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0
##   68    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   69    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   71    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   72    0   0   0   1   0   1   0   0   0   0   0   0   0   0   0   0   0
##   73    0   0   1   0   1   1   2   1   0   1   0   0   0   0   1   0   0
##   74    0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0
##   75    0   0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0
##   76    1   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0
##   79    1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   80    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   81    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   83    0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   1
##   84    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   85    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   86    0   0   0   0   0   2   0   0   0   1   0   0   4   0   0   3   1
##   87    0   0   0   0   0   2   0   0   0   0   0   0   0   0   0   0   1
##   89    0   0   0   0   1   0   0   0   0   0   1   0   0   0   0   0   0
##   90    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   94    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   96    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   97    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   100   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##      prediction
## value  59  61  64  65  67  68  69  71  72  73  74  75  76  79  80  81  83
##   1     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   3     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   4     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0
##   5     0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   6     0   0   1   0   0   0   0   0   0   1   0   1   0   0   0   0   0
##   7     0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0   0
##   10    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   12    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   14    0   0   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   15    1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   17    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   20    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   22    0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0
##   23    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   26    0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0   0
##   28    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   31    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   33    0   0   0   0   0   0   0   0   0   1   0   0   0   0   0   0   0
##   34    0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0
##   35    0   0   0   0   0   0   0   1   0   0   0   0   0   0   0   0   0
##   36    0   0   2   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   37    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   39    0   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0
##   40    1   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   42    0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0
##   43    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   45    1   0   0   0   0   0   0   0   0   0   0   1   0   0   0   0   0
##   46    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   47    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   49    2   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   50    0   0   0   0   0   0   0   0   0   0   0   0   0   0   1   0   0
##   51    2   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   53    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   57    2   1   2   0   0   0   0   0   0   1   0   0   0   0   0   0   0
##   59  137   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   61    0  46   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   64    1   0  44   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   65    0   0   0  77   0   0   0   0   0   0   0   0   0   0   0   0   0
##   67    0   0   0   0  15   0   0   0   0   0   0   0   0   0   0   0   0
##   68    0   0   0   0   1  26   0   0   0   0   0   0   0   0   0   0   0
##   69    0   0   0   1   0   0  68   0   0   1   0   0   0   0   0   0   1
##   71    0   0   0   0   0   0   0  16   0   0   0   0   0   0   0   0   0
##   72    0   0   0   0   0   0   1   0 168   1   0   0   0   0   0   0   0
##   73    1   1   0   2   0   0   0   0   0  97   0   0   0   0   0   0   0
##   74    0   0   0   0   0   0   0   0   0   0  16   0   0   0   0   0   0
##   75    0   0   0   0   0   0   0   0   0   0   0  50   0   0   0   0   0
##   76    0   0   0   0   0   0   0   0   1   0   0   0 116   0   0   0   0
##   79    0   0   0   0   0   0   1   0   0   0   0   0   0  44   0   0   0
##   80    0   0   0   0   0   0   0   0   0   0   0   0   0   0  19   0   0
##   81    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0  59   0
##   83    0   0   0   0   0   0   0   0   0   2   0   0   0   0   0   1   9
##   84    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   85    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   86    2   1   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   87    0   0   0   0   0   0   0   0   1   0   0   0   0   1   0   0   0
##   89    2   0   2   0   0   0   0   1   2   3   0   1   0   0   0   0   0
##   90    0   0   1   1   0   0   0   0   0   1   0   0   0   0   0   1   0
##   94    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   96    0   0   0   1   0   0   0   0   0   0   0   0   0   0   0   0   0
##   97    0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##   100   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0   0
##      prediction
## value  84  85  86  87  89  90  94  96  97 100
##   1     0   0   0   0   0   0   0   0   0   0
##   3     0   0   0   0   0   0   0   0   0   0
##   4     0   0   0   0   0   0   0   0   0   0
##   5     0   0   0   0   0   0   0   0   0   0
##   6     1   0   0   0   0   0   0   0   0   0
##   7     0   0   0   0   0   0   0   0   0   0
##   10    0   0   0   0   0   0   0   0   0   0
##   12    0   0   0   0   0   0   0   0   0   0
##   14    0   0   0   0   1   0   0   0   0   0
##   15    0   0   0   0   0   0   0   0   0   0
##   17    0   0   0   0   0   0   0   0   0   0
##   20    0   0   4   0   1   0   0   0   3   0
##   22    0   1   0   0   2   0   0   0   0   0
##   23    0   0   0   0   0   0   0   0   0   0
##   26    0   0   0   0   0   0   0   0   1   0
##   28    0   0   0   0   0   0   0   0   0   0
##   31    0   0   0   0   0   0   0   0   0   0
##   33    0   0   0   0   0   0   0   0   0   0
##   34    0   0   0   0   0   1   0   0   0   0
##   35    0   0   1   0   0   1   0   0   0   0
##   36    0   0   0   0   0   0   0   0   0   0
##   37    0   0   0   1   0   0   0   0   0   0
##   39    0   0   0   2   0   0   0   0   0   0
##   40    0   0   0   0   0   1   0   0   2   0
##   42    0   0   0   0   0   1   0   0   0   0
##   43    0   0   0   0   0   0   0   0   0   0
##   45    0   0   0   0   0   0   0   0   0   0
##   46    0   0   2   0   0   1   0   0   1   0
##   47    0   0   0   0   0   0   0   0   0   0
##   49    0   0   2   0   2   1   0   0   1   0
##   50    0   0   0   0   0   0   0   0   0   0
##   51    0   0   0   0   2   0   0   0   0   1
##   53    0   0   1   0   0   0   0   0   0   0
##   57    0   0   1   2   3   0   1   0   0   0
##   59    0   0   0   0   0   0   1   0   0   0
##   61    0   0   0   0   0   0   0   0   0   0
##   64    0   0   0   0   2   0   1   0   0   0
##   65    0   0   0   0   0   1   0   0   1   0
##   67    0   0   0   0   0   0   0   0   0   0
##   68    0   0   0   0   0   0   0   0   0   0
##   69    0   0   0   0   0   0   0   0   0   0
##   71    0   0   0   0   0   0   0   0   0   0
##   72    0   0   0   1   1   1   2   0   1   0
##   73    1   0   0   1   1   2   0   0   1   0
##   74    0   0   0   0   0   1   0   0   0   0
##   75    0   0   0   2   0   1   0   0   0   0
##   76    0   0   0   0   0   1   0   0   0   0
##   79    0   0   0   0   0   0   0   0   0   0
##   80    0   0   0   0   0   0   0   0   0   0
##   81    0   0   0   0   0   3   0   0   0   0
##   83    0   0   0   0   0   2   0   1   0   0
##   84   46   0   0   0   0   0   0   0   0   0
##   85    0  41   0   0   0   0   0   0   0   0
##   86    0   0 104   4   0   0   0   3   0   0
##   87    0   0   0 102   0   0   0   0   0   0
##   89    0   0   1   1 117   1   0   2   1   0
##   90    0   0   0   0   0 188   0   1   1   0
##   94    0   0   0   0   0   0 116   0   0   0
##   96    0   0   0   0   0   0   0  61   0   0
##   97    0   0   0   0   0   0   2   0  85   0
##   100   0   0   0   0   0   1   0   0   0  16